| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- import { type NextRequest } from 'next/server';
- import { apiError, apiSuccess } from '@/lib/server/api-response';
- import {
- isValidClassroomJobId,
- readClassroomGenerationJob,
- } from '@/lib/server/classroom-job-store';
- import { buildRequestOrigin } from '@/lib/server/classroom-storage';
- import { createLogger } from '@/lib/logger';
- const log = createLogger('ClassroomJob API');
- export const dynamic = 'force-dynamic';
- export async function GET(req: NextRequest, context: { params: Promise<{ jobId: string }> }) {
- let resolvedJobId: string | undefined;
- try {
- const { jobId } = await context.params;
- resolvedJobId = jobId;
- if (!isValidClassroomJobId(jobId)) {
- return apiError('INVALID_REQUEST', 400, 'Invalid classroom generation job id');
- }
- const job = await readClassroomGenerationJob(jobId);
- if (!job) {
- return apiError('INVALID_REQUEST', 404, 'Classroom generation job not found');
- }
- const pollUrl = `${buildRequestOrigin(req)}/api/generate-classroom/${jobId}`;
- return apiSuccess({
- jobId: job.id,
- status: job.status,
- step: job.step,
- progress: job.progress,
- message: job.message,
- pollUrl,
- pollIntervalMs: 5000,
- scenesGenerated: job.scenesGenerated,
- totalScenes: job.totalScenes,
- result: job.result,
- error: job.error,
- done: job.status === 'succeeded' || job.status === 'failed',
- });
- } catch (error) {
- log.error(`Classroom job retrieval failed [jobId=${resolvedJobId ?? 'unknown'}]:`, error);
- return apiError(
- 'INTERNAL_ERROR',
- 500,
- 'Failed to retrieve classroom generation job',
- error instanceof Error ? error.message : String(error),
- );
- }
- }
|